//常用 Promise 静态方法

function ajax (url) {
    return new Promise(function (resolve, reject) {
        //AJAX请求
        var xhr = new XMLHttpRequest()
        //请求方式和地址
        xhr.open('GET', url)
        //请求类型
        //获取结果为json对象而不是字符串
        xhr.responseType = 'json'
        //请求完成过后执行
        xhr.onload = function () {
            if (this.status === 200) {
                //请求成功 返回请求的结果
                resolve(this.response)
            } else {
                //请求失败 返回错误信息 即当前状态文本
                reject(new Error(this.statusText))
            }
        }
        //开始执行异步请求
        xhr.send()
    }) 
}

//返回状态为fulfilled的Promise对象 作为promise对象的返回值
// Promise.resolve('foo')
//     .then(function (value) {
//         console.log(value);     //'foo'
//     })

// //等价于下面的例子
// new Promise(function (resolve, reject) {
//     resolve('foo')
// })

//接收到的为promise对象 则会原样返回该promise对象
// var promise  = ajax('/api/users.json')
// var promise2 = Promise.resolve(promise)
//返回true 说明Promise.resolve原样返回promise
// console.log(promise === promise2);

//传入对象也可以作为一个promise对象被执行
//对象中的then提供了一个接口 可以被then的对象
//利于第三方的promise转换成原生的promise对象
// Promise.resolve({
//     then: function (onFulfilled, onRejected) {
//         onFulfilled('foo')
//     }
// })
// .then(function (value) {
//     console.log(value);
// })

//用于创建一定是失败的promise对象  传入的参数会作为promise失败的理由
Promise.reject(new Error('rejected'))
    .catch(function (error) {
        console.log(error);
    })